////////////////////////////////////////////////////////////////////////////////
//
//  FLEX USER GROUP HOKURIKU
//  Copyright 2009 Flex User Group Hokuriku
//  All Rights Reserved.
// 
//  NOTICE: Flex User Group Hokuriku permits you to use, 
//  modify, and distribute this file 
//  in accordance with the terms of the license agreement accompanying it.
//
////////////////////////////////////////////////////////////////////////////////
package net.fxug.hokuriku.chocolat.model
{
    import net.fxug.hokuriku.chocolat.errors.NetworkInterfaceError;

    /**
     * ネットワークインターフェイスのデータをやり取りするための定義クラス
     *
     * @throws ERROR [NetworkInterfaceData init error]               コンストラクタに渡された値が不足
     * @throws ERROR [NetworkInterfaceData init error Illegal value] コンストラクタに渡された値が不正(AIRのバグで発生することを確認)
     * 
     * @author mac
     */
    public class NetworkInterfaceData
    {
        /**
         * ネットワークインファーフェイス名
         *
         * @memo AIR2.0βの場合楽しく文字化けしている･･･orz
         */
        private var _name:String;

        public function get name():String
        {
            return this._name;
        }


        /**
         * IPアドレス
         *
         * @memo IPv6未対応
         */
        private var _address:String;

        public function get address():String
        {
            return this._address;
        }


        /**
         * サブネットマスク
         *
         * @memo AIR2.0でWindows7でIPv6とIPv4の両方のIPを取得時にIPv6の値がおかしくなるバグあり
         */
        private var _network_mask:int;

        public function get network_mask():int
        {
            return this._network_mask;
        }


        /**
         * ブロードキャストアドレス
         *
         * @memo ローカルな環境に一斉送信するためのアドレス
         */
        private var _broadcast:String;

        public function get broadcast():String
        {
            return this._broadcast;
        }
        
        /**
         * コンストラクタ
         * 
         * @param inName      // ネットワークインターフェイス名
         * @param inAddress   // IPアドレス
         * @param inMask      // サブネットマスク
         * @param inBroadcast // ブロードキャストアドレス
         * @throws Error      // 値が不足
         * @throws Error      // 値が不正
         */
        public function NetworkInterfaceData(inName:String, inAddress:String, inMask:int, inBroadcast:String)
        {
            // 値が無いとネットワーク機能が利用できない
            // TODO Errorクラスってこれでよかったっけ？
            if (!inName || !inAddress || !inMask || !inBroadcast) {
                throw new Error("NetworkInterfaceData init error /name = " + inName + "/address = " + inAddress + "/mask = " + inMask + "/broaadcast = " + inBroadcast);
            }
            
            // IPv4の場合maskは32まで(Win7でIPv4の場合にmaskの値がおかしいバグがあったのでチェック)
            if (inMask > 32) {
                throw new NetworkInterfaceError(NetworkInterfaceError.NETWORK_MASK_ERROR);
            }
            
            this._name         = inName;
            this._address      = inAddress;
            this._network_mask = inMask;
            this._broadcast    = inBroadcast;
        }
    }
}